<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      /*
        普通情况下，this指向看函数的调用方式：
          1. 直接调用（默认绑定），this指向window, 严格模式（'use strict'）下指向undefined
          2. 对象调用函数（隐式绑定），this指向调用的对象
          3. call/apply/bind调用函数（显示绑定），this指向传入第一个参数
            call/apply/bind区别和联系：
              1. call/apply都会立即执行函数，bind返回一个新函数
              2. call/apply执行函数时函数的this指向第一个参数，bind方法返回的新函数的this指向第一个参数，原函数不变
              3. call/bind方法传参是一致的, apply第二个参数是数组
                call(obj, arg1, arg2, ...)   apply(obj, [arg1, arg2, ...])
          4. new调用函数，this指向生成的实例对象
        特殊情况：
          1. 箭头函数：this指向包裹它离它最近的函数的this（指向外部函数的this）
          2. 回调函数：
            定时器回调函数：window，严格模式下undefined
            DOM事件回调函数：指向绑定的事件的DOM元素
            Vue生命周期函数 / methods中的函数 / 微信小程序生命周期函数：指向组件实例对象
      */
    </script>
  </body>
</html>
